Add a test for --version flag interception
authorAnton Larin <edding.default@gmail.com>
Sun, 31 Jan 2016 16:02:47 +0000 (19:02 +0300)
committerAnton Larin <edding.default@gmail.com>
Sun, 31 Jan 2016 16:02:47 +0000 (19:02 +0300)
tests/test_cargo_version.rs

index 0e19bbeeabf7caa2fd4effb351483fbb5d301c50..debc32e402b403119b01e07646ef8394480835f3 100644 (file)
@@ -16,3 +16,32 @@ test!(simple {
                                                             cargo::version())));
 
 });
+
+#[derive(RustcDecodable)]
+struct FooFlags {
+    flag_version: bool,
+}
+
+fn real_main(flags: FooFlags, _config: &cargo::Config) ->
+        cargo::CliResult<Option<String>> {
+    if flags.flag_version {
+        Ok(Some("foo <version>".to_string()))
+    } else {
+        Ok(None)
+    }
+}
+
+test!(subcommand_with_version_using_exec_main_without_stdin {
+    let usage = "
+Usage: cargo foo [--version]
+
+Options:
+    -V, --version       Print version info
+";
+    let args: Vec<String> = vec!["cargo", "foo", "--version"]
+        .into_iter().map(|s| s.to_string()).collect();
+    let result = cargo::call_main_without_stdin(
+                real_main, &cargo::Config::default().unwrap(),
+                usage, &args, false);
+    assert_eq!(result.unwrap(), Some("foo <version>".to_string()));
+});